/******************************************************************************
 * $LastChangedDate: 2011-04-23 21:07:07 -0400 (Sat, 23 Apr 2011) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   C++ exceptions.
 *//*
 * LEGAL:   COPYRIGHT (C) 2004 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 ******************************************************************************/

#define BASE_EXCEPTION_CC 1
#include <exception>
#include <sstream>
#include "base/module.hh"
#include "base/stream.hh"
#include "base/exception.hh"

namespace base {

////////////////////////////////////////////////////////////////////////////////
//////////////////////////////  functions  /////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

/*****************************************************************************
 * Print exception.
 *****************************************************************************/
void
PrintException( const std::exception& ex, const string& functionName )
{
    CERROR << "** EXCEPTION!! [" << functionName << "] **" << std::endl
           << ex.what() << std::endl;
}

////////////////////////////////////////////////////////////////////////////////
//////////////////////////////  Exception  /////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

/*****************************************************************************
 * ctor/dtor.
 *****************************************************************************/
Exception::Exception( void )
:   mText("Exception!")
{
}

Exception::Exception( const string& text )
:   mText(text)
{
}

Exception::Exception( const std::ostringstream& oss )
:   mText(oss.str())
{
}

Exception::~Exception() throw()
{
}

/*****************************************************************************
 * @return Exception's error message text.
 *****************************************************************************/
const char*
Exception::what( void ) const throw()
{
    return mText.c_str();
}

} // namespace base
